home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue27 / tiptrix / Dbrestr / RestrU.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1997-07-15  |  5.3 KB  |  209 lines

  1. unit Restru;
  2. interface
  3.  
  4. uses
  5.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  6.   Forms, Dialogs, Buttons, ExtCtrls, Menus, StdCtrls, DbTables, MainU;
  7.  
  8. type
  9.   TRestrF = class(TForm)
  10.     ListBox1: TListBox;
  11.     MainMenu1: TMainMenu;
  12.     Field1: TMenuItem;
  13.     Add1: TMenuItem;
  14.     Insert1: TMenuItem;
  15.     Rename1: TMenuItem;
  16.     Delete1: TMenuItem;
  17.     N1: TMenuItem;
  18.     Close1: TMenuItem;
  19.     procedure FormCreate(Sender: TObject);
  20.     procedure MenuClick(Sender: TObject);
  21.     procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  22.       State: TDragState; var Accept: Boolean);
  23.     procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  24.       Shift: TShiftState; X, Y: Integer);
  25.     procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  26.     procedure ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
  27.     procedure FormShow(Sender: TObject);
  28.     procedure Close1Click(Sender: TObject);
  29.   private
  30.     Ind : ShortInt;
  31.     IsDragging : boolean;
  32.   public
  33.     procedure Modify(ATable: TTable);
  34.   end;
  35.  
  36. var
  37.   RestrF: TRestrF;
  38.  
  39. implementation
  40. uses
  41.   DB,DBRestr,AddU,{$IFDEF Win32} Bde {$ELSE} DbiTypes {$ENDIF};
  42. {$R *.DFM}
  43.  
  44. procedure TRestrF.FormCreate(Sender: TObject);
  45. begin
  46.   AutoScroll := True;
  47. end;
  48.  
  49. procedure TRestrF.Modify(ATable: TTable);
  50. var
  51.   j: byte;
  52. begin
  53.   ListBox1.Clear;
  54.   with ATable do
  55.     for j:=0 to FieldCount-1 do
  56.       ListBox1.Items.Add(Fields[j].FieldName);
  57.   ShowModal;
  58. end;
  59.  
  60. procedure TRestrF.MenuClick(Sender: TObject);
  61. const
  62.   FieldTypes : array[0..1] of TFieldType = (ftString,ftInteger);
  63.   FieldSizes : array[0..1] of byte = (30,0);
  64. var
  65.   j,ATag,ComboInd: byte;
  66.   S, OldName: string;
  67. begin
  68.  Atag := (Sender as TMenuItem).Tag;
  69.  if ATag <> 0 then begin
  70.    Ind:= ListBox1.ItemIndex;
  71.    if Ind = -1 then begin
  72.      MessageDlg('No item selected!',mtError,[mbOk],0);
  73.      exit;
  74.    end;
  75.  end;
  76.  MainF.Table1.DisableControls;
  77.  try try
  78.   case ATag of
  79.     0,1 :
  80.       begin
  81.         AddF := TAddF.Create(Application);
  82.         with AddF do try
  83.           if ATag=0 then
  84.             Caption :='Add Field'
  85.           else
  86.             Caption := 'Insert Field';
  87.           Edit1.Text := '';
  88.           ComboBox1.ItemIndex := 0;
  89.           if ShowModal <> mrOk then exit;
  90.           ComboInd := ComboBox1.ItemIndex;
  91.           S:=Edit1.Text;
  92.           if S = '' then exit;
  93.           if ATag = 0 then
  94.             Restructure(MainF.Table1, resADD, MainF.Table1.FieldCount,0,
  95.               S,FieldTypes[ComboInd],FieldSizes[ComboInd])
  96.           else
  97.             Restructure(MainF.Table1, resADD, Ind,0,
  98.               S,FieldTypes[ComboInd],FieldSizes[ComboInd]);
  99.         finally
  100.           AddF.Free;
  101.         end;
  102.      end;
  103.  
  104.      2 :
  105.        begin
  106.          with ListBox1 do
  107.            OldName := Items[ItemIndex];
  108.          AddF := TAddF.Create(Application);
  109.          with AddF do try
  110.            Caption := 'Rename Field';
  111.            Edit1.Text := OldName;
  112.            if ShowModal <> mrOk then exit;
  113.            S:=Edit1.Text;
  114.            if (S='') or(S = OldName) then exit;
  115.            Restructure(MainF.Table1, resModify, Ind,0,
  116.              S,ftUnknown,0);
  117.          finally
  118.            AddF.Free;
  119.          end;
  120.        end;
  121.  
  122.      3 :
  123.        if MessageDlg('Delete this field?',mtWarning,
  124.          [mbYes,mbNo],0) = mrYes then
  125.            Restructure(MainF.Table1, resDROP, Ind,0,
  126.              '',ftUnknown,0);
  127.  
  128.   end;
  129.   with ListBox1.Items do begin
  130.     BeginUpdate;
  131.     Clear;
  132.     for j:=0 to MainF.Table1.FieldCount-1 do
  133.       ListBox1.Items.Add(MainF.Table1.Fields[j].FieldName);
  134.     EndUpdate;
  135.   end;
  136.  except
  137.   MessageDlg('Unable to perform operation.',mtError,
  138.     [mbOk],0);
  139.  end;
  140.  finally
  141.    MainF.Table1.EnableControls;
  142.  end;
  143. end;
  144.  
  145. procedure TRestrF.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  146.   State: TDragState; var Accept: Boolean);
  147. begin
  148.   Accept := (Source = ListBox1);
  149. end;
  150.  
  151. procedure TRestrF.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  152.   Shift: TShiftState; X, Y: Integer);
  153. begin
  154.   if (Button <> mbLeft) or (IsDragging) then exit;
  155.   Ind := ListBox1.ItemIndex;
  156.   if Ind <> -1 then ListBox1.BeginDrag(False);
  157. end;
  158.  
  159.  
  160. procedure TRestrF.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  161. var
  162.   Dest : ShortInt;
  163.   j: byte;
  164. begin
  165.   with ListBox1 do begin
  166.     IsDragging := true;
  167.     Perform(wm_LButtonDown, 0, MakeLong(X, Y));
  168.     Perform(wm_LButtonUp,   0, MakeLong(X, Y));
  169.     Dest := ItemIndex;
  170.     if (Dest <> -1) and (Dest <> Ind) then begin
  171.       MainF.Table1.DisableControls;
  172.       try try
  173.         Restructure(MainF.Table1, resMOVE, Ind,Dest,
  174.            '',ftUnknown,0);
  175.         with Items do begin
  176.           BeginUpdate;
  177.           Clear;
  178.           for j:=0 to MainF.Table1.FieldCount-1 do
  179.             Add(MainF.Table1.Fields[j].FieldName);
  180.           EndUpdate;
  181.         end;
  182.       except
  183.         MessageDlg('Unable to perform operation.',mtError,
  184.             [mbOk],0);
  185.       end;
  186.       finally
  187.         MainF.Table1.EnableControls;
  188.       end;
  189.     end;
  190.   end;
  191. end;
  192.  
  193. procedure TRestrF.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
  194. begin
  195.   IsDragging := false;
  196. end;
  197.  
  198. procedure TRestrF.FormShow(Sender: TObject);
  199. begin
  200.   IsDragging := false;
  201. end;
  202.  
  203. procedure TRestrF.Close1Click(Sender: TObject);
  204. begin
  205.   Close;
  206. end;
  207.  
  208. end.
  209.